package br.ita.trucocearense.server.core;

import java.util.ArrayList;



public class Partida{
	
	private DeckCartas deck = new DeckCartas();
	private Rodada rodada;
	private Mesa mesa;
	private Carta manilha;
	private int numeroDaRodada;
	private boolean finalDaPartida = false;
	private int pontosDaPartida = 1;
	private ArrayList<Integer> resultado = new ArrayList<Integer>();
	private boolean empate = false;
	private boolean temRodadaComEmpate = false;
	private int equipeVencedora;
	private int posicaoPrimeiroJogador;
	
	public int getPosicaoPrimeiroJogador() {
		return posicaoPrimeiroJogador;
	}

	public void setPosicaoPrimeiroJogador(int posicaoPrimeiroJogador) {
		this.posicaoPrimeiroJogador = posicaoPrimeiroJogador;
	}

	public int getEquipeVencedora() {
		System.out.println("Pegou EquipeVencedoraPartida " + equipeVencedora);
		return equipeVencedora;
	}

	public void setEquipeVencedora(int equipeVencedora) {
		System.out.println("Setou EquipeVencedoraPartida " + equipeVencedora);
		this.equipeVencedora = equipeVencedora;
		this.setFinalDaPartida(true);
		this.mesa.getEquipe()[equipeVencedora].incPontuacaoJogo(this.getPontosDaPartida());
	}

	public int getPontosDaPartida() {
		return pontosDaPartida;
	}

	public void setPontosDaPartida(int pontosDaPartida) {
		this.pontosDaPartida = pontosDaPartida;
	}

	public int getNumeroDaRodada() {
		return numeroDaRodada;
	}

	public Carta getManilha() {
		return manilha;
	}

	public Partida(Mesa mesa,int posicaoPrimeiroJogador) {
		System.out.println("comecou partida construtor");
		this.mesa = mesa;
		this.manilha = deck.getManilha();
		for(int pos = 0; pos < 4; pos++)
			this.mesa.getUserPosicao(pos).setCartas(deck.getCartas(this.manilha));
		this.numeroDaRodada = 0;
		this.mesa.getEquipe()[0].setPontuacaoPartida(0);
		this.mesa.getEquipe()[1].setPontuacaoPartida(0);
		this.setPosicaoPrimeiroJogador(posicaoPrimeiroJogador);
	}

	public void iniciarRodada(){
		this.numeroDaRodada++;
		if (this.rodada != null){
			int posicaoJogadorMaiorCarta = this.rodada.getPosicaoJogadorMaiorCarta();
			this.rodada = new Rodada(mesa,posicaoJogadorMaiorCarta);
		}
		else
			this.rodada = new Rodada(mesa,this.getPosicaoPrimeiroJogador());
	}

	public Rodada getRodada() {
		return rodada;
	}
	
	public boolean isFinalDaPartida() {
		return finalDaPartida;
	}
	
	public void setFinalDaPartida(boolean finalDaPartida) {
		this.finalDaPartida = finalDaPartida;
	}

	public void atualizarPlacar(){
		this.rodada.atualizaPlacar();
		if (this.rodada.isFinalDaRodada()){
			if (this.rodada.isEmpate()){
				this.resultado.add(new Integer(-1));
				this.setTemRodadaComEmpate(true);
			}
			else
				this.resultado.add(new Integer(this.rodada.getEquipeVencedora()));
			this.decidirPartida();
			if (this.isFinalDaPartida()){
				System.out.println("Terminou partida ");
				System.out.println("PARTIDA Equipe 0 -> " + this.mesa.getEquipe()[0].getPontuacaoJogo());
				System.out.println("PARTIDA Equipe 1 -> " + this.mesa.getEquipe()[1].getPontuacaoJogo());
			}
		}
		
	}
	
	private void decidirPartida(){
		if (this.isTemRodadaComEmpate() == false){
			for(int i = 0; i < 2; i++)
				if (this.mesa.getEquipe()[i].getPontuacaoPartida() == 2)
					this.setEquipeVencedora(i);
		}
		else{
			if (this.resultado.get(0) != -1)
				this.setEquipeVencedora(resultado.get(0));
			else
				if (this.resultado.get(this.getNumeroDaRodada() - 1) != -1)
					this.setEquipeVencedora(resultado.get(this.getNumeroDaRodada() - 1));
			if (this.getNumeroDaRodada() == 3 && this.isFinalDaPartida() == false)
				this.setEmpate(true);	
		}
			
		
	}

	public boolean isEmpate() {
		return empate;
	}

	public void setEmpate(boolean empate) {
		this.empate = empate;
		this.setFinalDaPartida(true);
	}

	public boolean isTemRodadaComEmpate() {
		return temRodadaComEmpate;
	}

	public void setTemRodadaComEmpate(boolean temRodadaComEmpate) {
		this.temRodadaComEmpate = temRodadaComEmpate;
	}




}
